import { botName, roomWhiteList, aliasWhiteList, diyContentConfig } from '../../config.js'

/**
 * 消息发送
 * @param msg
 * @param bot
 * @returns {Promise<void>}
 */
export async function sendMessage(msg, bot) {
  // 发消息人
  const contact = msg.talker()
  // 消息接收人
  const receiver = msg.to()
  // 消息内容
  const content = msg.text()
  // 是否是群消息
  const room = msg.room()
  // 群名称
  const roomName = (await room?.topic()) || null
  // 发消息人昵称
  const alias = (await contact.alias()) || (await contact.name())
  // 备注名称
  const remarkName = await contact.alias()
  // 微信名称
  const name = await contact.name()
  // 消息类型是否为文本
  const isText = msg.type() === bot.Message.Type.Text

  // 是否在群聊白名单内，逻辑可自行修改（例如用正则等其他判断方式）
  const isRoom = roomWhiteList.includes(roomName)
  // 发消息的人是否在联系人白名单内，逻辑可自行修改（例如用正则等其他判断方式）
  const isAlias = aliasWhiteList.includes(remarkName) || aliasWhiteList.includes(name)
  // 是否是机器人自己，逻辑可自行修改（例如用正则等其他判断方式）
  const isBotSelf = botName === remarkName || botName === name
  // 匹配到的关键词，逻辑可自行修改（例如用正则等其他判断方式）
  const matchedKeyword = diyContentConfig.filter((_) => content.includes(_))

  // 如果是机器人自己发送的消息或者消息类型不是文本则不处理
  if (isBotSelf) return

  // 可以根据需求修改下方逻辑
  try {
    // 群聊消息且在配置的群里
    if (room && isRoom) {

      //是否@了机器人，没有@不处理
      if (!await msg.mentionSelf()) {
        return
      }

      //获取群成员信息
      // const allContacts = await room.memberAll()
      // console.log('allContacts)', allContacts)

      //视频、附件、图片、语音类消息
      if (msg.type() === bot.Message.Type.Video ||
        msg.type() === bot.Message.Type.Attachment ||
        msg.type() === bot.Message.Type.Image ||
        msg.type() === bot.Message.Type.Audio) {
        console.log(`RECV: ${msg}`)
        const file = await msg.toFileBox()
        const name = file.name
        file.toFile(name)
        const fileResponse = `文件名称：${file.name}\n文件大小：${(file.size / 1024).toFixed(2)}KB\n`
        console.log('Save file to: ' + name)
        // TODO 自己的逻辑，文件处理
        await room.say(fileResponse, mentionContact)
        return;
      }

      //文本信息
      if (isText) {
        console.log('content', content)
        //是否在配置的关键词内
        if (matchedKeyword.length) {
          // 去掉艾特的消息主体
          const question = (await msg.mentionText()) || content.replace(`${botName}`, '')
          console.log('消息内容: ', question)
          // TODO 自己的逻辑，获取响应信息，调用后台接口、大模型智能问答等
          const response = "123";
          console.log('回复内容: ', response)
          await room.say(response)
          console.log(JSON.stringify(mentionContact))
          if (mentionContact) {
            // 发送消息并@指定用户
            await room.say('返回用户输入的内容：' + res, mentionContact)
          }
        }
      }
    }

    // 私人聊天且在白名单内的消息
    if (isAlias && !room) {
      console.log('消息内容: ', content)
      // TODO 自己的逻辑，获取响应信息，调用后台接口、大模型智能问答等
      const response = "123";
      console.log('回复内容: ', response)
      await contact.say(response)
    }
  } catch (e) {
    console.error('消息处理失败：', e)
  }
}